﻿#ifndef SERVIDOR_DE_ARQUIVOS_H
#define SERVIDOR_DE_ARQUIVOS_H

#include "Arquivo.h"
#include "Cliente.h"
#include "../controller/Logger.h"

#include <QDebug>
#include <QString>
#include <QList>
#include <QHash>
#include <QDir>
#include <QFile>
#include <QFileInfo>
#include <QByteArray>
#include <QMutex>
#include <QStringList>
#include <QMutableStringListIterator>
#include <QPair>

namespace model
{
	class ServidorArquivos : public QObject
	{
		Q_OBJECT
		public:
			explicit ServidorArquivos( QString &path, QObject *parent = 0 );

			virtual Arquivo* getArquivo( const QString&, const ModoAbertura& );
			virtual QList<QPair<QString, ModoAbertura> >* listarDiretorio();
			virtual bool fileExists( const QString& );
			virtual Arquivo* adicionarArquivo( const QString&, const QByteArray& );
			virtual QList<Arquivo*>* getArquivoPorExt( const QString&, const ModoAbertura& );
			virtual void renomearArquivo( Arquivo*, const QString& );
			virtual void apagarArquivo( Arquivo* );

			virtual void listaArquivosAbertosClientes();
			virtual ~ServidorArquivos();
		private:
			QDir *dir;
			QString path;
			QHash<QString, Arquivo*> arquivos;

			QMutex mutex;

			virtual Arquivo* _getArquivo( const QString& );
		public slots:
			// Chamado pelo arquivo quando ele detectar que nao
			// tem mais nenhum usuario.
			void fecharArquivo( Arquivo* );
	};
}

#endif
